﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
using FastFood.Business.Entities;
using FastFood.Business.Entities.Tipos;
using FastFood.Business.Logic;
using FastFood.Windows.Helpers;

namespace FastFood.Windows.Forms.Reportes
{
    public partial class CwfVentas : UserControl
    {
        public CwfVentas()
        {
            InitializeComponent();
        }

        private void CwfVentas_Load(object sender, EventArgs e)
        {
            dtpDesdeT.Value = DateTime.Now.AddMonths(-1);
            dtpHastaT.Value = DateTime.Now.AddMonths(1);
            dtpDesdeG.Value = DateTime.Now.AddMonths(-3);
            dtpHastaG.Value = DateTime.Now.AddMonths(3);
            txtNumero.Clear();

            CargarClientes();
            CargarEmpledos();
            CargarDocumentos();
            CargarEstados();
            CargarProductos();
        }

        private void btnMostrarT_Click(object sender, EventArgs e)
        {
            int? clienteID, empleadoID, documento, numero;
            DateTime desde, hasta;
            string serie, estado;

            desde = dtpDesdeT.Value;
            hasta = dtpHastaT.Value;

            if (cmbCliente.SelectedIndex <= 0) clienteID = (int?)null;
            else clienteID = Convert.ToInt32(cmbCliente.SelectedValue);

            if (cmbPersonal.SelectedIndex <= 0) empleadoID = (int?)null;
            else empleadoID = Convert.ToInt32(cmbPersonal.SelectedValue);

            if (cmbDocumento.SelectedIndex <= 0) documento = (int?)null;
            else documento = Convert.ToInt32(cmbDocumento.SelectedIndex) - 1;

            if (cmbSerie.SelectedIndex <= 0) serie = string.Empty;
            else serie = cmbSerie.SelectedValue.ToString();

            if (string.IsNullOrEmpty(txtNumero.Text)) numero = (int?)null;
            else numero = Convert.ToInt32(txtNumero.Text);

            if (cmbEstado.SelectedIndex <= 0) estado = string.Empty;
            else estado = cmbEstado.SelectedValue.ToString();

            try
            {
                reporteVentasTableAdapter.Fill(jCNDataSet.ReporteVentas, desde, hasta, clienteID, documento, serie, numero, empleadoID, estado);
                rvwTextual.RefreshReport();
            }
            catch (Exception) { }
        }

        private void cmbDocumento_SelectedIndexChanged(object sender, EventArgs e)
        {
            byte tipoDocumento = Convert.ToByte(cmbDocumento.SelectedIndex);
            if (tipoDocumento > 0)
            {
                CargarSeries(tipoDocumento);
            }
            else
            {
                cmbSerie.DataSource = null;
            }
        }

        private void btnGenerarG_Click(object sender, EventArgs e)
        {
            int? clienteID, productoID, tipo;
            DateTime desde, hasta;

            desde = dtpDesdeG.Value;
            hasta = dtpHastaG.Value;

            if (cmbClienteG.SelectedIndex <= 0) clienteID = (int?)null;
            else clienteID = Convert.ToInt32(cmbClienteG.SelectedValue);

            if (cmbProducto.SelectedIndex <= 0)
            {
                productoID = (int?)null;
                tipo = (int?)null;
            }
            else
            {
                var value = cmbProducto.SelectedValue.ToString();
                productoID = Convert.ToInt32(value.Split(',')[0]);
                tipo = Convert.ToInt32(value.Split(',')[1]);
            }

            try
            {
                reporteGraficoVentasTableAdapter.Fill(jCNDataSet.ReporteGraficoVentas, desde, hasta, clienteID, productoID, tipo);
                rvwGrafico.RefreshReport();
            }
            catch (Exception) { }
        }

        private void CargarClientes()
        {
            try
            {
                var clientes = ClientesManager.Instancia.Listar();
                clientes.Insert(0, new Clientes());

                cmbCliente.DataSource = clientes;
                cmbCliente.DisplayMember = "nombreCompleto";
                cmbCliente.ValueMember = "clienteID";

                cmbClienteG.DataSource = clientes;
                cmbClienteG.DisplayMember = "nombreCompleto";
                cmbClienteG.ValueMember = "clienteID";
            }
            catch (Exception) { }
        }

        private void CargarEmpledos()
        {
            try
            {
                var personalCn = new PersonalCn();
                var empleados = personalCn.listarPersonal();
                empleados.Insert(0, new Personal());
                cmbPersonal.ValueMember = "personalID";
                cmbPersonal.DisplayMember = "nombreCompleto";
                cmbPersonal.DataSource = empleados;
            }
            catch (Exception) { }
        }

        private void CargarDocumentos()
        {
            var documentos = Enum.GetNames(typeof(TipoDocumento)).ToList();
            documentos.Insert(0, string.Empty);
            cmbDocumento.DataSource = documentos;
        }

        private void CargarSeries(byte tipoDocumento)
        {
            try
            {
                tipoDocumento = Convert.ToByte(tipoDocumento - 1);
                var coleccion = CorrelativosManager.Instancia.ListarByTipoDocumento(tipoDocumento);
                cmbSerie.DataSource = coleccion;
                cmbSerie.DisplayMember = "serie";
                cmbSerie.ValueMember = "serie";
                cmbSerie.SelectedIndex = 0;
            }
            catch (Exception) { } 
        }

        private void CargarEstados()
        {
            var estados = new List<Listado>();
            estados.Add(new Listado { Display = string.Empty, Value = "0" });

            var names = Enum.GetNames(typeof(TipoEstado));
            var values = Enum.GetNames(typeof(TipoEstado));

            for (int i = 0; i < names.Length; i++)
            {
                estados.Add(new Listado { Display = names[i], Value = values[i] });
            }

            cmbEstado.DataSource = estados;
            cmbEstado.ValueMember = "Value";
            cmbEstado.DisplayMember = "Display";
        }

        private void CargarProductos()
        {
            try
            {
                var productos = new VendiblesManager().ListarByNombre(string.Empty);
                productos.Insert(0, new Vendibles());

                foreach (var producto in productos)
                {
                    producto.descripcion = producto.vendibleID + "," + (int)producto.tipo;
                }

                cmbProducto.DataSource = productos;
                cmbProducto.ValueMember = "descripcion";
                cmbProducto.DisplayMember = "nombre";
            }
            catch (Exception) { }
        }
    }
}
